package com.ht.module.bus.service;

import com.ht.module.bus.dto.RoomRuleChangeDto;
import com.ht.module.bus.dto.ScorePointsDto;
import com.ht.module.bus.entity.BusRoom;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ht.util.Pager;

import java.math.BigDecimal;

/**
 * <p>
 * 房间表 服务类
 * </p>
 *
 * @author hejialun
 * @since 2024-11-25
 */
public interface BusRoomService extends IService<BusRoom> {

    /**
     * 加入房间
     * @param roomId :房间号
     */
    void joinRoom(Integer roomId);

    /**
     * 退出房间
     * @param roomId
     */
    void quitRoom(Integer roomId);

    /**
     * 创建房间
     * @param en
     * @return
     */
    BusRoom createRoom(BusRoom en);

    /**
     * 解散房间
     * @param roomId
     */
    void dissolveRoom(Integer roomId);

    /**
     * 查询当前用户最近一个未开始的房间
     * @return
     */
    BusRoom findNoStartRoomByUser();

    /**
     * 通过id查询房间号
     * @param id
     * @return
     */
    BusRoom findById(Integer id);



    /**
     * 开始计分
     * @param en：开始计分参数实体
     */
    void startScoring(RoomRuleChangeDto en);

    /**
     * 查询出当前用户所加入的所有房间
     * @param pager
     * @param en
     * @return
     */
    Pager<BusRoom> findStartRoomByTime(Pager<BusRoom> pager, BusRoom en);

    /**
     * 将用户踢出房间
     * @param roomId:房间id
     * @param userId：用户id
     */
    void kickOutRoomById(Integer roomId,String userId);

    /**
     * 向积分池给分
     * @param roomId
     * @param score
     */
    void givePoolScore(Integer roomId, BigDecimal score);

    /**
     * 从积分池取分
     * @param roomId
     * @param score
     */
    void takePoolScore(Integer roomId, BigDecimal score);

    /**
     * 结束比赛
     * @param roomId
     */
    void endGame(Integer roomId);

    /**
     * 房间规则变化消息-通知房间内的人，实时响应
     * @param en
     */
    void roomRuleChangeMessage(RoomRuleChangeDto en);

    /**
     * 给分
     * @param en
     */
    void givePoints(ScorePointsDto en);

    /**
     * 扣分
     * @param en
     */
    void deductScore(ScorePointsDto en);
}
